package com.xianggu.spring.aop.config;

import com.xianggu.spring.aop.joinPoint.ProceedingJoinPoint;

import java.lang.reflect.Method;

/**
 * AOP拓展接口
 */
public interface Advice {
    /**
     * 返回需要切入的类全限定名
     * @return
     */
    String Pointcut();
    /**
     * 方法执行前
     * @param joinPoint
     */
        void before(ProceedingJoinPoint joinPoint);
        /**
     * 方法执行后
     * @param joinPoint
     */
        void after(ProceedingJoinPoint joinPoint);

    /**
     * 方法执行异常
     * @param method
     * @param throwable
     */
    void afterThrowing(Method method, Throwable throwable);


    void afterReturning(Method method, Object result);

    /**
     * 方法执行around
     * @param joinPoint
     */
    void around(ProceedingJoinPoint joinPoint);
    }